package br.ucb.cesbdao.janelas;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableRowSorter;

import br.ucb.cesbdao.enuns.EnumLabelAndBotao;
import br.ucb.cesbdao.enuns.EnumResources;
import br.ucb.cesbdao.enuns.EnumTitulo;
import br.ucb.cesbdao.model.TipoAtendimentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TipoAtendimentoModel;
import br.ucb.cesbdao.model.impl.TipoAtendimentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoAtendimentoModelImpl;
import br.ucb.cesbdao.modeloTabelas.ModeloTabelaTipoAtendimento;
import br.ucb.cesbdao.servicos.JanelaUtil;
import br.ucb.cesbdao.servicos.Validadores;

public class JanelaTipoAtendimento extends JDialog {

	private static final long serialVersionUID = -8328898694784853868L;
	
	private final JPanel contentPanel = new JPanel();
	private JTable jtTipoDoAtendimento;
	private JTable jtTipoAtendimento;
	private JTextField jtxtTipoDoAtendimento;
	private JTextField jtxtTipoAtendimento;
	private JScrollPane spTipoDoAtendimento;
	private JLabel lblTipoDoAtendimento;
	private JButton btnAdd;
	private JButton btnDell;
	private JLabel lblTipos;
	private JScrollPane spTipoAtendimento;
	private ModeloTabelaTipoAtendimento modeloTabelaTipoAtendimento = new ModeloTabelaTipoAtendimento();
	private ModeloTabelaTipoAtendimento modeloTabelaTipoDoAtendimento = new ModeloTabelaTipoAtendimento();
	private static int idAtendimento;

	public static int getIdAtendimento() {
		return idAtendimento;
	}

	public static void setIdAtendimento(int idAtendimento) {
		JanelaTipoAtendimento.idAtendimento = idAtendimento;
	}

	/**
	 * Create the dialog.
	 */
	public JanelaTipoAtendimento() {
		setTitle(EnumTitulo.TITULO_TIPO_ATENDIMENTO.getTitulo());
		setResizable(false);
		setModal(true);
		setBounds(100, 100, 741, 555);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();

		spTipoDoAtendimento = new JScrollPane();

		lblTipoDoAtendimento = new JLabel(EnumLabelAndBotao.TIPO_ATENDIMENTO.getTexto());

		lblTipos = new JLabel(EnumLabelAndBotao.TIPO_ATENDIMENTO.getTexto());

		spTipoAtendimento = new JScrollPane();

		btnAdd = new JButton(EnumLabelAndBotao.ADICIONAR.getTexto());
		btnAdd.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				adiciona();
			}



		});

		btnDell = new JButton(EnumLabelAndBotao.REMOVER.getTexto());
		btnDell.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				remover();
			}

			
		});

		jtxtTipoDoAtendimento = new JTextField();
		jtxtTipoDoAtendimento.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				zeraPreencheTabelaTipoDoAtendimento();
			}
		});
		jtxtTipoDoAtendimento.setColumns(10);

		jtxtTipoAtendimento = new JTextField();
		jtxtTipoAtendimento.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				zeraPreencheTabelaTipoAtendimento();
			}
		});
		jtxtTipoAtendimento.setColumns(10);
		
		JButton btnOk = new JButton(EnumLabelAndBotao.OK.getTexto());
		btnOk.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		btnOk.setIcon(new ImageIcon(JanelaTipoAtendimento.class.getResource(EnumResources.ICONE_SALVAR.getCaminho())));
		
		GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
		gl_contentPanel.setHorizontalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
						.addComponent(spTipoDoAtendimento, GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
						.addComponent(lblTipoDoAtendimento)
						.addComponent(jtxtTipoDoAtendimento, GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE))
					.addGap(12)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING)
							.addComponent(btnAdd)
							.addComponent(btnDell))
						.addGroup(gl_contentPanel.createSequentialGroup()
							.addComponent(btnOk)
							.addPreferredGap(ComponentPlacement.RELATED, 2, GroupLayout.PREFERRED_SIZE)))
					.addGap(10)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING, false)
						.addComponent(jtxtTipoAtendimento)
						.addComponent(lblTipos)
						.addComponent(spTipoAtendimento, GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE))
					.addGap(18))
		);
		gl_contentPanel.setVerticalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addGap(6)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblTipoDoAtendimento)
						.addComponent(lblTipos))
					.addGap(18)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
						.addComponent(spTipoDoAtendimento, GroupLayout.PREFERRED_SIZE, 428, GroupLayout.PREFERRED_SIZE)
						.addComponent(spTipoAtendimento, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
						.addComponent(jtxtTipoAtendimento, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(jtxtTipoDoAtendimento, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addContainerGap(15, Short.MAX_VALUE))
				.addGroup(Alignment.TRAILING, gl_contentPanel.createSequentialGroup()
					.addContainerGap(149, Short.MAX_VALUE)
					.addComponent(btnAdd, GroupLayout.PREFERRED_SIZE, 62, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(btnDell, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(btnOk)
					.addGap(140))
		);
		gl_contentPanel.linkSize(SwingConstants.VERTICAL, new Component[] {btnAdd, btnDell, btnOk});
		gl_contentPanel.linkSize(SwingConstants.HORIZONTAL, new Component[] {btnAdd, btnDell, btnOk});

		jtTipoAtendimento = new JTable();
		jtTipoAtendimento.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				if(e.getClickCount() == 2)
					adiciona();
			}
		});
		jtTipoAtendimento.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jtTipoAtendimento.setAutoCreateRowSorter(true);
		spTipoAtendimento.setViewportView(jtTipoAtendimento);
		jtTipoAtendimento.setModel(modeloTabelaTipoAtendimento);
		modeloTabelaTipoAtendimento.setTipos(model.getByNotInIdAtendimento(idAtendimento));

		jtTipoDoAtendimento = new JTable();
		jtTipoDoAtendimento.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				if(e.getClickCount() == 2){
					remover();
				}
			}
		});
		spTipoDoAtendimento.setViewportView(jtTipoDoAtendimento);
		jtTipoDoAtendimento.setModel(modeloTabelaTipoDoAtendimento);
		modeloTabelaTipoDoAtendimento.setTipos(model.getByIdAtendimento(getIdAtendimento()));

		contentPanel.setLayout(gl_contentPanel);
	}
	private void zeraPreencheTabelaTipoDoAtendimento() {
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		modeloTabelaTipoDoAtendimento = new ModeloTabelaTipoAtendimento();
		jtTipoDoAtendimento.setModel(modeloTabelaTipoDoAtendimento);
		jtTipoDoAtendimento.getTableHeader().setReorderingAllowed(false);
		jtTipoDoAtendimento.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jtTipoDoAtendimento.setAutoCreateRowSorter(true);
		modeloTabelaTipoDoAtendimento.setTipos(model.getByIdAtendimento(getIdAtendimento()));
		filtraTabelaDoAtendimento();

	}
	private void filtraTabelaDoAtendimento() {
		final TableRowSorter<ModeloTabelaTipoAtendimento> sorter = new TableRowSorter<ModeloTabelaTipoAtendimento>(modeloTabelaTipoDoAtendimento);
		String busca = jtxtTipoDoAtendimento.getText();
		JanelaUtil.getInstance().filtrarTabela(busca, sorter, jtTipoDoAtendimento, 0);
	}
	private void filtraTabelaAtendimento() {
		final TableRowSorter<ModeloTabelaTipoAtendimento> sorter = new TableRowSorter<ModeloTabelaTipoAtendimento>(modeloTabelaTipoAtendimento);
		String busca = jtxtTipoAtendimento.getText();
		JanelaUtil.getInstance().filtrarTabela(busca, sorter, jtTipoAtendimento, 0);
	}

	private void zeraPreencheTabelaTipoAtendimento() {
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		modeloTabelaTipoAtendimento = new ModeloTabelaTipoAtendimento();
		jtTipoAtendimento.setModel(modeloTabelaTipoAtendimento);
		jtTipoAtendimento.getTableHeader().setReorderingAllowed(false);
		jtTipoAtendimento.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jtTipoAtendimento.setAutoCreateRowSorter(true);
		modeloTabelaTipoAtendimento.setTipos(model.getByNotInIdAtendimento(idAtendimento));
		filtraTabelaAtendimento();

	}
	
	private void remover() {
		TipoAtendimentoDoAtendimentoModel model = new TipoAtendimentoDoAtendimentoModelImpl();
		if(jtTipoDoAtendimento.getSelectedRow() < 0){
			return;
		}
		model.dell(idAtendimento,modeloTabelaTipoDoAtendimento.getTipoAtendimento(jtTipoDoAtendimento.getSelectedRow()).getIdTipoAtende());
		jtxtTipoAtendimento.setText(EnumLabelAndBotao.SEM_TEXTO.getTexto());
		jtxtTipoDoAtendimento.setText(EnumLabelAndBotao.SEM_TEXTO.getTexto());
		zeraPreencheTabelaTipoDoAtendimento();
		zeraPreencheTabelaTipoAtendimento();
	}
	public void adiciona(){
		TipoAtendimentoDoAtendimentoModel model = new TipoAtendimentoDoAtendimentoModelImpl();
		if(jtTipoAtendimento.getSelectedRow() < 0){
			return;
		}
		if(Validadores.validaNewTipoAtende_Atende(idAtendimento,modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtendimento.getSelectedRow()).getIdTipoAtende())){
			return;
		}
		model.add(idAtendimento,modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtendimento.getSelectedRow()).getIdTipoAtende());
		jtxtTipoAtendimento.setText("");
		jtxtTipoDoAtendimento.setText("");
		zeraPreencheTabelaTipoDoAtendimento();
		zeraPreencheTabelaTipoAtendimento();
	}
}
